import java.io.File;
import java.io.IOException;
import java.util.Scanner;

//扫描指定目录，并找到名称中包含指定字符的所有普通文件（不包含目录），
//并且后续询问用户是否要删除该文件
public class Demo_ScanFileDir {
    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);
        //1.先让用户输入一个要扫描的路径
        System.out.println("请输入要扫描的路径：");
        String path = scanner.next();
        File rootPath = new File(path);
        if(!rootPath.isDirectory()){
            System.out.println("您输入的路径有误！");
            return;
        }
        //2.再让用户输入一个要查询的关键词
        System.out.println("请输入要删除文件的关键词：");
        String word = scanner.next();
        //3.可以进行递归扫描
        scanDir(rootPath, word);
    }
    private static void scanDir(File rootPath, String word) throws IOException {
        //1.先列出rootPath中所有的文件和目录
        File[] files = rootPath.listFiles();
        if(files == null){
            //当前目录为null，就可以直接返回了
            return;
        }
        //2.遍历这里的每个元素，针对不同的类型，做不同的处理
        for(File f : files){
            //加个日志，方便观察当前递归的过程
            System.out.println("当前扫描的目录为：" + f.getCanonicalPath());
            if(f.isFile()){
                //普通文件，检查是否要删除，执行删除动作
                checkDelete(f, word);
            }else{
                //目录，递归得再去判断子目录里的内容
                scanDir(f, word);
            }
        }
    }

    private static void checkDelete(File f, String word) {
        if(!f.getName().contains(word)){
            //不必删除，直接结束方法
            return;
        }
        //需要删除
        System.out.println("当前文件为：" + f.getAbsolutePath() + "，请确认是否需要删除(y/n)：");
        Scanner scanner = new Scanner(System.in);
        String choice = scanner.next();
        if(choice.equals("Y") || choice.equals("y")){
            //真正执行删除
            f.delete();
            System.out.println("删除完毕！");
        }else{
            //如果输入其他值，不一定是n，都要取消删除
            System.out.println("取消删除！");
        }
    }
}
